/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var setZeroes = function(matrix) {
  // 1.使用空间O(m + n);作为标记，标记该行/列需要被置零
  // const iArr = new Array(matrix.length).fill(0), jArr = new Array(matrix[0].length).fill(0);
  // for(let i = 0; i < matrix.length; i++) {
  //   for(let j = 0; j < matrix[i].length; j++) {
  //     if(matrix[i][j] === 0) {
  //       iArr[i] = 1;
  //       jArr[j] = 1;
  //     }
  //   }
  // }
  // for(let i = 0; i < matrix.length; i++) {
  //   for(let j = 0; j < matrix[i].length; j++) {
  //     if(iArr[i] || jArr[j]) {
  //       matrix[i][j] = 0;
  //     }
  //   }
  // }
  // return matrix;

  // 2.用常量
  // 主要是用第一行和第一列进行记录
  // 2.1 如果第一行或第一列为0，则记录下来
  // 2.2 如果看到了某一个值为0，将该行、该列的第一个记录为0
  // 2.3 跳过第一行、第一列，从第二行、第二列开始遍历，如果为0，则将该行、列置为0
  // 2.4 如果第0行、第0列的标记为true，则将该行、列置位0
  let row = false, col =false;
  for(let i = 0; i < matrix.length; i++) {
    for(let j = 0; j < matrix[i].length; j++) {
      if(matrix[i][j] === 0) {
        if(i == 0)
          row = true;
        if(j == 0)
          col = true;
        matrix[i][0] = matrix[0][j] = 0;
      }
    }
  }
  // console.log(matrix);
  // 行
  for(let i = 1; i < matrix.length; i++) {
    if(matrix[i][0] === 0) {
      for(let j = 1; j < matrix[i].length; j++) {
        matrix[i][j] = 0;
      }
    }
  }
  // console.log(matrix);
  // 列
  for(let i = 1; i < matrix[0].length; i++) {
    if(matrix[0][i] === 0) {
      for(let j = 1; j < matrix.length; j++) {
        matrix[j][i] = 0;
      }
    }
  }
  // console.log(matrix);
  if(row) {
    for(let i = 0; i < matrix[0].length; i++) {
      matrix[0][i] = 0;
    }
  }
  // console.log(matrix);
  if(col) {
    for(let i = 0; i < matrix.length; i++) {
      matrix[i][0] = 0;
    }
  }
  // console.log(matrix);
  return matrix;
};
let matrix = [[1,1,1],[1,0,1],[1,1,1]];
// console.log(setZeroes(matrix));
// matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]];
// console.log(setZeroes(matrix));
matrix = [[-4,-2147483648,6,-7,0],[-8,6,-8,-6,0],[2147483647,2,-9,-6,-10]];
console.log(setZeroes(matrix));
